package com.itlong.cloud.commons.dao;

import com.itlong.cloud.POJO.PO.*;
import com.itlong.cloud.POJO.VO.app.AppCloudIntercomsVO;
import com.itlong.cloud.POJO.VO.property.*;
import com.itlong.cloud.abstracts.IAbstractBaseDao;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * <desc>
 *      硬件响应变更通知数据访问接口
 * </desc>
 *
 * @createDate 2017/12/04
 */
@Mapper
@Repository
public interface IPushCloudElevatorChangeLogDao{
    /**
     * <desc>
     *      获取待处理的推送指令
     * </desc>
     *
     * @param projectId 项目id
     * @return
     * @author Juguang.S
     * @createDate 2018/04/03
     */
    List<DeviceBusinessElevatorChangeLogPO> getPendingBusiness(@Param("projectId") String projectId, @Param("type") Integer type);

    /**
     * <desc>
     *      根据projectId获取待处理的推送指令
     * </desc>
     *
     * @param projectId 项目id
     * @return
     * @author Juguang.S
     * @createDate 2018/04/03
     */
    List<CloudElevatorByProjectIdVO> getCloudElevatorByProjectId(@Param("projectId") String projectId,@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     *      根据电梯唯一编码电梯相关信息
     * </desc>
     *
     * @param deviceUnique 设备唯一码
     * @return
     * @author Juguang.S
     * @createDate 2021/06/03
     */
    CloudElevatorByProjectIdVO getCloudElevatorByDeviceUnique(@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     *      批量保存
     * </desc>
     *
     * @param list
     * @return
     * @author Juguang.S
     * @createDate 2018/04/03
     */
    Integer batchSave(@Param("list") List<PushCloudElevatorChangeLogPO> list);

    /**
     * <desc>
     *      批量保存带更新时间
     * </desc>
     *
     * @param list
     * @return
     * @author Qiang.S
     * @createDate 2019/01/16
     */
    Integer batchSaveAndUpgradeTime(@Param("list") List<PushCloudElevatorChangeLogPO> list);

    /**
     * <desc>
     *      全量更新
     * </desc>
     *
     * @param projectId  项目id集合
     * @param type 4房间全量 5云电梯业务服务器地址变更
     * @return
     * @author Juguang.S
     * @createDate 2018/04/03
     */
    Integer updateBusinessStatusFull(@Param("projectId") String projectId,@Param("type") Integer type);

    /**
     * <desc>
     *      根据项目id和类型更新同步状态
     * </desc>
     *
     * @param projectId
     * @param type
     * @return
     * @author Juguang.S
     * @createDate 2018/04/03
     */
    Integer updateBusinessStatusSuccessByProjectAndType(@Param("projectId") String projectId,@Param("type") Integer type);

    /**
     * <desc>
     *      通过项目id查询项目信息
     * </desc>
     *
     * @param projectId 项目id
     * @return
     * @author Juguang.S
     * @createDate 2018/04/03
     */
    CloudElevatorPushProjectCommanDataVO getProjectById(@Param("projectId") String projectId);

    /**
     * <desc>
     *      通过项目id查询项目信息
     * </desc>
     *
     * @param projectId 项目id
     * @return
     * @author Juguang.S
     * @createDate 2018/04/03
     */
    CloudElevatorPushProjectCommanDataVO getEntranceProjectById(@Param("projectId") String projectId);

    /**
     * <desc>
     *      通过设备唯一码获取设备详情
     * </desc>
     *
     * @param deviceUnique 设备唯一码
     * @return
     * @author Juguang.S
     * @createDate 2018/04/03
     */
    Map<String,Object> getPushDeviceInfo(@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     *      更新状态为已处理
     * </desc>
     *
     * @param ids
     * @return
     * @author Juguang.S
     * @createDate 2018/04/03
     */
    Integer updateBusinessStatusSuccess(@Param("projectIds")String[] projectIds,@Param("ids") String[] ids);

    /**
     * <desc>
     *      根据buildId查找云电梯设备
     * </desc>
     *
     * @param ids
     * @return
     * @author Juguang.S
     * @createDate 2018/04/04
     */
    List<CloudElevatorByBuildIdVO> getCloudElevatorByBuildId(@Param("ids")String[] ids);

    /**
     * <desc>
     *      根据roomId去查找room的信息
     * </desc>
     *
     * @param roomId
     * @param projectId
     * @return
     * @author Juguang.S
     * @createDate 2018/04/08
     */
    PushRoomCommanDataByCloudElevatorVO getRoomInfo(@Param("roomId")String roomId,@Param("projectId") String projectId);

    /**
     * <desc>
     *      根据roomId去查找roomNum
     * </desc>
     *
     * @param roomId
     * @return
     * @author Juguang.S
     * @createDate 2018/08/31
     */
    RoomInfoPO getRoomInfoByRoomId(@Param("roomId")String roomId);

    /**
     * <desc>
     *      根据项目ID获取项目下的云群控器设备
     * </desc>
     *
     * @param projectId 项目id
     * @return
     * @author Juguang.S
     * @createDate 2019/03/28
     */
    List<CloudElevatorByProjectIdVO> getCloudControllerByProjectId(@Param("projectId") String projectId);

    /**
     * <desc>
     *      根据sn查询云电梯或云群控器信息
     * </desc>
     *
     * @param sn
     * @return
     * @author Juguang.S
     * @createDate 2019/03/28
     */
    String getCloudDeviceInfo(@Param("sn") String sn);

    /**
     * <desc>
     *      获取用户项目房间下的云电梯设备信息
     * </desc>
     *
     * @param userId 用户id
     * @param projectId 项目id
     * @return
     * @author Qiang.S
     * @createDate 2019/04/28
     */
    List<AppCloudIntercomsVO> getUserClouds(@Param("userId") String userId, @Param("projectId") String projectId);

    /**
     * <desc>
     *      根据设备唯一码获取sn
     * </desc>
     *
     * @param deviceUnique 设备唯一码
     * @return
     * @author Juguang.S
     * @createDate 2019/03/28
     */
    String getCloudElevatorBindController(@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     *      通过设备唯一码获取云群控器设备详情
     * </desc>
     *
     * @param deviceUnique 设备唯一码
     * @return
     * @author Juguang.S
     * @createDate 2019/03/29
     */
    Map<String,Object> getPushCloudControllerDeviceInfo(@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     *      根据电梯deviceUnique判断是否有被云群控器所绑定
     * </desc>
     *
     * @param deviceUnique 设备唯一码
     * @return
     * @author Juguang.S
     * @createDate 2019/04/28
     */
    String isBindControllerByElevator(@Param("deviceUnique") String deviceUnique);

    String getSnByDeviceUnique(@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     *      检查设备是否属于当前房间楼栋
     * </desc>
     *
     * @param deviceUnique    设备唯一码
     * @param roomId 房间id
     * @return
     * @author Qiang.S
     * @createDate 2019/04/28
     */
    Integer checkDeviceInRoom(@Param("deviceUnique") String deviceUnique,@Param("roomId") String roomId);

    /**
     * <desc>
     *      根据访客信息编号查询设备信息
     * </desc>
     *
     * @param vFaceId 百度中的人脸编号
     * @return
     * @author Qiang.S
     * @createDate 2019/04/28
     */
    List<PushCloudVisitorInfoDeviceVO> getVisitorDeviceInfo(String vFaceId);

    /**
     * <desc>
     *      查询设备下的房间id集合
     * </desc>
     *
     * @param deviceUnique
     * @return
     * @author Juguang.S
     * @createDate 2019/06/26
     */
    List<Map<String,Object>> getRoomInfoByElevator(@Param("deviceUnique")String deviceUnique);

    /**
     * <desc>
     *      根据设备编号查询云电梯版本号和iotkey
     * </desc>
     *
     * @param deviceUnique 设备编号
     * @return
     * @author Qiang.S
     * @createDate 2019/04/28
     */
    ProductTypePO getElevatorVersonIotkey(@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     *      根据sn查询电梯副盘状态
     * </desc>
     *
     * @param sn
     * @return
     * @author Qiang.S
     * @createDate 2020/06/18
     */
    Integer getBracketPanelBySn(@Param("sn") String sn);

    /**
     * <desc>
     *      清空过期的轮询命令
     * </desc>
     *
     * @param deviceUnique
     * @return
     * @author Jiaqi.X
     * @createDate 2020/11/12
     */
    Integer clearExpiredChangeLog(@Param("deviceUnique") String deviceUnique);

}
